// 控制器是通过class来实现的
// 但并不是随便一个 class 就能成为控制器
// 类似继承的概念，koa-controllers 为我们提供了一个装饰器：Controller
// 通过此装饰器我们可以把一个普通类变成具有控制器特征的控制器类
import { Controller, Get, Ctx, Post } from 'koa-controllers';
import { Context } from 'koa';
// import db from '../models';
import { Model } from "sequelize";

@Controller
export class MainController {
    @Get('/')
    public async index(@Ctx ctx: Context) {
        // 我们希望用户在通过get方式访问 / 的时候执行该方法，我们就可以使用
        // Get,Post装饰器来装饰该方法
        // console.log(ctx);
        ctx.body = "lance";
    }

    @Post('/')
    public async index2(@Ctx ctx: Context) {
        ctx.body = 'lance post';
    }

    @Get('/user')
    public async user(@Ctx ctx: Context) {
        // let userList = await (<Model<any, any>>ctx.state.db['user']).findAll();
        // let userList = await (<Model<any, any>>ctx.state.db['user']).findAll({
        //     attributes: { 
        //         exclude: ["password"] // 这些条件可以放进 Model模型的 user.ts 的 defaultScope 中配置
        //     }
        // });
        // 使用自定义配置【在 user.ts 中的 scope 中配置】
        let userList = await (<Model<any, any>>ctx.state.db['user']).scope('sw').findAll();
        ctx.body = userList;
    }
}